<!DOCTYPE html>
<html lang="en" class="no-js">
  <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/clipboard@1/dist/clipboard.min.js"></script>
  <head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="generator" content="Hugo 0.55.6" />

<META NAME="ROBOTS" CONTENT="INDEX, FOLLOW">

<link rel="alternate" type="application/rss&#43;xml" href="/v0.5/index.xml">

<link rel="shortcut icon" href="/v0.5/assets/favicons/favicon.ico" >
<link rel="apple-touch-icon" href="/v0.5/assets/favicons/apple-touch-icon.png" sizes="180x180">
<link rel="icon" type="image/png" href="/v0.5/assets/favicons/favicon-16x16.png" sizes="16x16">
<link rel="icon" type="image/png" href="/v0.5/assets/favicons/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="/v0.5/assets/favicons/android-144x144.png" sizes="36x36">
<link rel="icon" type="image/png" href="/v0.5/assets/favicons/android-144x144.png" sizes="48x48">
<link rel="icon" type="image/png" href="/v0.5/assets/favicons/android-144x144.png" sizes="72x72">
<link rel="icon" type="image/png" href="/v0.5/assets/favicons/android-144x144.png" sizes="96x196">
<link rel="icon" type="image/png" href="/v0.5/assets/favicons/android-144x144.png" sizes="144x144">
<link rel="icon" type="image/png" href="/v0.5/assets/favicons/android-192x192.png"sizes="192x192">

<title>Extensibility: Providers | Meshery</title>
<meta property="og:title" content="Extensibility: Providers" />
<meta property="og:description" content="Meshery is the open source, cloud native management plane that enables the adoption, operation, and management of Kubernetes, any service mesh, and their workloads.
" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://localhost:4000" />
<meta property="og:site_name" content="http://localhost:4000" />

<meta itemprop="name" content="Extensibility: Providers">
<meta itemprop="description" content="Meshery is the open source, cloud native management plane that enables the adoption, operation, and management of Kubernetes, any service mesh, and their workloads.
">

<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Extensibility: Providers"/>
<meta name="twitter:description" content="Meshery is the open source, cloud native management plane that enables the adoption, operation, and management of Kubernetes, any service mesh, and their workloads.
"/>

<link rel="stylesheet" href="/v0.5/assets/css/main.css">
<link rel="stylesheet" href="/v0.5/assets/css/palette.css">
<link rel="stylesheet" href="/v0.5/assets/css/anchorjs.css">
<link rel="stylesheet" href="/v0.5/assets/css/sass.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.css">

<script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  crossorigin="anonymous"></script>
  <!-- Anchorjs included for adding hover anchor links to headings -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.2.2/anchor.min.js"></script>
  <script>  
  $(function() {
  /** AnchorJS options and selector */  
   anchors.options = {
      visible : 'hover',
      placement: 'left'
   };
   anchors.add('h1, h2, h3, h4, h5');
   });
   </script>
</head>
<style>

</style>
  <body class="td-section">
    <header>
  <nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
    <a class="navbar-brand" href="/v0.5/">
      <div class="navbar-logo">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 279.49 51.83"><defs><style>.cls-1{fill:#00d3a9}.cls-2{fill:#00b39f}.cls-3{fill:#fff}</style></defs><title>Asset 14</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><polygon points="26.68 12.21 26.68 24.59 37.4 18.38 26.68 12.21" class="cls-1"/><polygon points="26.68 27.18 26.68 39.62 37.5 33.43 26.68 27.18" class="cls-1"/><polygon points="25.13 24.51 25.13 12.32 14.54 18.39 25.13 24.51" class="cls-2"/><path d="M3.88,39.58a26,26,0,0,0,8.22,8.27v-13Z" class="cls-2"/><polygon points="25.13 39.56 25.13 27.27 14.51 33.42 25.13 39.56" class="cls-2"/><polygon points="13.64 47.07 24.4 40.92 13.64 34.7 13.64 47.07" class="cls-1"/><polygon points="38.24 47.14 38.24 34.79 27.5 40.93 38.24 47.14" class="cls-2"/><path d="M48.76,38.14A25.71,25.71,0,0,0,51.8,27L40.6,33.44Z" class="cls-2"/><polygon points="39.78 32.13 50.58 25.95 39.78 19.75 39.78 32.13" class="cls-1"/><polygon points="38.24 17.08 38.24 4.81 27.55 10.94 38.24 17.08" class="cls-2"/><polygon points="38.24 32.07 38.24 19.68 27.52 25.89 38.24 32.07" class="cls-2"/><polygon points="25.9 51.83 25.91 51.83 25.9 51.83 25.9 51.83" class="cls-2"/><polygon points="13.64 19.66 13.64 32.14 24.43 25.89 13.64 19.66" class="cls-1"/><path d="M25.13,0A25.75,25.75,0,0,0,13.75,3L25.13,9.55Z" class="cls-2"/><polygon points="13.64 4.72 13.64 17.13 24.44 10.93 13.64 4.72" class="cls-1"/><path d="M12.1,4a26,26,0,0,0-8.22,8.27L12.1,17Z" class="cls-2"/><path d="M38.17,3.07A25.8,25.8,0,0,0,26.68,0V9.65Z" class="cls-1"/><path d="M0,26.82A25.76,25.76,0,0,0,3.1,38.24l8.32-4.82Z" class="cls-1"/><path d="M3.1,13.58A25.67,25.67,0,0,0,0,24.94l11.44-6.55Z" class="cls-1"/><path d="M13.73,48.8a25.81,25.81,0,0,0,11.4,3V42.28Z" class="cls-2"/><path d="M48,12.28A25.91,25.91,0,0,0,39.78,4V17Z" class="cls-1"/><path d="M39.78,47.8A26,26,0,0,0,48,39.48l-8.21-4.73Z" class="cls-1"/><path d="M51.8,24.88a25.84,25.84,0,0,0-3.07-11.27l-8.24,4.77Z" class="cls-2"/><path d="M26.68,51.82a25.81,25.81,0,0,0,11.37-3L26.68,42.24Z" class="cls-1"/><polygon points="12.1 32.03 12.1 19.79 1.47 25.88 12.1 32.03" class="cls-2"/><polygon points="197.13 19 197.13 20.13 197.13 25.45 197.13 31.94 197.13 41.41 222.35 41.41 222.35 36.09 202.45 36.09 202.45 31.94 202.45 30.77 217.74 30.77 217.74 25.45 202.45 25.45 202.45 20.13 222.35 20.13 222.35 14.81 197.13 14.81 197.13 19" class="cls-3"/><polygon points="100.14 19 100.14 20.13 100.14 25.45 100.14 31.94 100.14 41.41 125.35 41.41 125.35 36.09 105.46 36.09 105.46 31.94 105.46 30.77 120.74 30.77 120.74 25.45 105.46 25.45 105.46 20.13 125.35 20.13 125.35 14.81 100.14 14.81 100.14 19" class="cls-3"/><path d="M160.26,34.46a6.61,6.61,0,0,1-.55,2.69,7,7,0,0,1-1.51,2.22A7.34,7.34,0,0,1,156,40.86a6.7,6.7,0,0,1-2.71.55H128.38v-5.6h24.89a1.35,1.35,0,0,0,1.35-1.35V32.29A1.33,1.33,0,0,0,153.27,31H135.36a6.78,6.78,0,0,1-2.69-.55,7.19,7.19,0,0,1-2.24-1.51,7,7,0,0,1-1.5-2.23,6.62,6.62,0,0,1-.55-2.7V21.8a6.75,6.75,0,0,1,.55-2.72,7,7,0,0,1,1.5-2.21,7.19,7.19,0,0,1,2.24-1.51,6.61,6.61,0,0,1,2.69-.55h24.9v5.64h-24.9a1.27,1.27,0,0,0-1,.39,1.31,1.31,0,0,0-.4,1V24a1.31,1.31,0,0,0,.4,1,1.27,1.27,0,0,0,1,.39h17.91a6.7,6.7,0,0,1,2.71.55,7.11,7.11,0,0,1,3.73,3.72,6.74,6.74,0,0,1,.55,2.71Z" class="cls-3"/><path d="M193.81,41.41h-5.07V31H169V41.41h-5.08V25.31h24.86V14.81h5.07ZM169,22.81h-5.08v-8H169Z" class="cls-3"/><polygon points="266.19 24.12 259.55 14.81 252.9 14.81 263.54 30.77 263.54 41.41 268.86 41.41 268.86 30.77 279.49 14.81 272.93 14.81 266.19 24.12" class="cls-3"/><path d="M231.4,19.88H245v5.53h-11v5.08h2.52l9.65,10.92h6.57l-9.65-10.92h3.76A4.13,4.13,0,0,0,251,26.36V18.94a4.13,4.13,0,0,0-4.13-4.13H226.19v26.6h5.32Z" class="cls-3"/><path d="M96.05,41.41H90.41V22a1.38,1.38,0,0,0-.13-.6,1.56,1.56,0,0,0-.33-.5,1.77,1.77,0,0,0-.5-.34,1.53,1.53,0,0,0-.6-.12H62.78V14.81H88.85a6.88,6.88,0,0,1,2.78.57,7.08,7.08,0,0,1,3.85,3.85A6.88,6.88,0,0,1,96.05,22Zm-27.63,0H62.78v-21l5.64-1.55Zm13.8,0H76.58v-18h5.64Z" class="cls-3"/></g></g></svg><span class="font-weight-bold" style="vertical-align: bottom"
          >Documentation</span
        >
      </div>
    </a>
    <div class="td-navbar-nav-scroll ml-md-auto" id="main_navbar">
      <ul class="navbar-nav mt-2 mt-lg-0">
        <!-- 
			<li class="nav-item mr-4 mb-2 mb-lg-0">
        <a class="nav-link" href="https://github.com/meshery/meshery" target="_blank"><span>GitHub</span></a>
      </li>  -->

        <!-- Internal links -->
         
            <li class="nav-item mr-4 mb-2 mb-lg-0">
              <a
                class="nav-link"
                href="/v0.5/installation/quick-start"
                ><span>Quick Start</span></a
              >
            </li>
         
            <li class="nav-item mr-4 mb-2 mb-lg-0">
              <a
                class="nav-link"
                href="https://meshery.io"
                ><span>Site</span></a
              >
            </li>
         
            <li class="nav-item mr-4 mb-2 mb-lg-0">
              <a
                class="nav-link"
                href="https://meshery.io/community/#discussion-forums"
                ><span>Discuss</span></a
              >
            </li>
         
            <li class="nav-item mr-4 mb-2 mb-lg-0">
              <a
                class="nav-link"
                href="https://github.com/meshery/meshery"
                ><span>GitHub</span></a
              >
            </li>
        

        <!--Version Selector -->

        <select onchange="window.location=this.value" class="appearance-none flex-1 w-full px-0 py-1 placeholder-gray-900 tracking-wide focus:outline-none version-selector" name="versioningSelection" id="versioningSelection">
          <!-- <option value="">Versions</option> -->
          

          <!-- we get the version selected, and put it to the right option  --><option  value="/v0.5" class="nav-item mr-4 mb-2 mb-lg-0 text-black">
            <span>v0.5</span>
          </option>
          <!-- we get the version selected, and put it to the right option  --><option  value="/" class="nav-item mr-4 mb-2 mb-lg-0 text-black">
            <span>latest</span>
          </option>
          <!-- we get the version selected, and put it to the right option  --><option  value="/v0.4" class="nav-item mr-4 mb-2 mb-lg-0 text-black">
            <span>v0.4</span>
          </option>
          
          </select>
    
        </ul>
    </div>

    <!--Search Bar
    <div class="navbar-nav d-none d-lg-block"><input type="search" class="form-control td-search-input" placeholder="&#xf002 Search this site…" aria-label="Search this site…" autocomplete="off"></div>-->

    <!-- meshery-custom-begin

	<div class="navbar-nav d-none d-lg-block">
          <a class="gh-source" data-gh-source="github" href="https://github.com/meshery/meshery" title="Go to repository" data-md-state="done">
          <div class="gh-source__repository">
            <i class="fab fa fa-github fa-2x" style='padding-right:20px; float:left; margin-top:5px'></i>
            meshery/meshery
          <ul class="gh-source__facts"><li class="gh-source__fact" id='stars'></li><li id="forks" class="gh-source__fact"></li></ul></div></a>
        </div>
      </div>

meshery-custom-end -->
  </nav>
</header>

<!-- meshery-custom-begin

<script>
$(document).ready(function() {
  var url = "https://api.github.com/search/repositories?q=meshery/meshery";
  fetch(url, { 
      headers: {"Accept":"application/vnd.github.preview"}
  }).then(function(e) {
    return e.json()
  }).then(function(r) {
     console.log(r.items[0])
     stars = r.items[0]['stargazers_count']
     forks = r.items[0]['forks_count']
     $('#stars').text(stars + " Stars")
     $('#forks').text(forks + " Forks")
  });
});
</script>

meshery-custom-end -->

    <div class="container-fluid td-outer">
      <div class="td-main">
        <div class="row flex-xl-nowrap">
          <div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none">
          <div id="td-sidebar-menu" class="td-sidebar__inner">  
    <form class="td-sidebar__search d-flex align-items-center">
   <input type="search" class="form-control td-search-input fas fa-search" placeholder="&#xf002" aria-label="Search this site…" autocomplete="off">
      <button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type="button" data-toggle="collapse" data-target="#td-section-nav" aria-controls="td-docs-nav" aria-expanded="false" aria-label="Toggle section navigation">
      </button>
    </form>  

    <nav class="collapse td-sidebar-nav pt-1 pl-3" id="td-section-nav">
      
    
    <ul class="td-sidebar-nav__section pr-md-3">
      
      
      <li class="td-sidebar-nav__section-title">
        <a  href="/v0.5/installation/quick-start" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">🚀 Quick Start</a>
      </li>
          
    </ul>
    
    <ul class="td-sidebar-nav__section pr-md-3">
      
      
      <li class="td-sidebar-nav__section-title">
        <a  href="/v0.5/project" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">🗺 Overview</a>
      </li>
      
        <ul>
          <li class="collapse show" id="overview">
              <ul class="td-sidebar-nav__section pr-md-3">
                
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/project/community" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Community</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/project/contributing" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Contributing ↆ</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/project/releases" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Releases</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/project/build-and-release" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Build & Release (CI)</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/project/security-vulnerabilities" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Vulnerabilities</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/project/faq" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">FAQ</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/installation/platforms" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Supported Platforms ↆ</a>
                </li>
                
              
            </ul>
        </ul>  
          
    </ul>
    
    <ul class="td-sidebar-nav__section pr-md-3">
      
      
      <li class="td-sidebar-nav__section-title">
        <a  href="/v0.5/concepts" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">🧠 Concepts</a>
      </li>
      
        <ul>
          <li class="collapse show" id="concepts">
              <ul class="td-sidebar-nav__section pr-md-3">
                
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/concepts/architecture" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Architecture</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/concepts/architecture/adapters" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Adapters</a>
                </li>
                
              
            </ul>
        </ul>  
          
    </ul>
    
    <ul class="td-sidebar-nav__section pr-md-3">
      
      
      <li class="td-sidebar-nav__section-title">
        <a  href="/v0.5/functionality" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">⚙️ Functionality</a>
      </li>
      
        <ul>
          <li class="collapse show" id="functionality">
              <ul class="td-sidebar-nav__section pr-md-3">
                
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/functionality/application-management" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Application Management</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/functionality/lifecycle-management" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Lifecycle Management</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/functionality/pattern-management" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Pattern Management</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/functionality/performance-management" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Performance Management</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/functionality/service-mesh-interface" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Service Mesh Interface (SMI) Conformance</a>
                </li>
                
              
            </ul>
        </ul>  
          
    </ul>
    
    <ul class="td-sidebar-nav__section pr-md-3">
      
      
      <li class="td-sidebar-nav__section-title">
        <a  href="/v0.5/service-meshes" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">🦾 Service Meshes</a>
      </li>
      
        <ul>
          <li class="collapse show" id="service-meshes">
              <ul class="td-sidebar-nav__section pr-md-3">
                
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/app-mesh" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">App Mesh</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/cpx" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Citrix Service Mesh</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/cilium" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Cilium Service Mesh</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/consul" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Consul</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/istio" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Istio</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/kuma" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Kuma</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/linkerd" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Linkerd</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/nsm" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Network Service Mesh</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/nginx-sm" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">NGINX Service Mesh</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/osm" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Open Service Mesh</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/tanzu-sm" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Tanzu</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/service-meshes/adapters/traefik-mesh" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Traefik Mesh</a>
                </li>
                
              
            </ul>
        </ul>  
          
    </ul>
    
    <ul class="td-sidebar-nav__section pr-md-3">
      
      
      <li class="td-sidebar-nav__section-title">
        <a  href="/v0.5/guides" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">📚 Guides</a>
      </li>
      
        <ul>
          <li class="collapse show" id="guides">
              <ul class="td-sidebar-nav__section pr-md-3">
                
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/guides/sample-apps" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Deploying Sample Applications</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/guides/smi-conformance" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Running SMI Conformance Tests</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/guides/meshery-metrics" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Integrating Prometheus and Grafana</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/guides/troubleshooting" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Troubleshooting Guide</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/guides/upgrade" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Upgrading Meshery</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/guides/mesheryctl" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Using mesheryctl ↆ</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/guides/multiple-adapters" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Using Multiple Meshery Adapters</a>
                </li>
                
              
            </ul>
        </ul>  
          
    </ul>
    
    <ul class="td-sidebar-nav__section pr-md-3">
      
      
      <li class="td-sidebar-nav__section-title">
        <a  href="/v0.5/extensibility" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">🛠 Extensibility</a>
      </li>
      
        <ul>
          <li class="collapse show" id="extensibility">
              <ul class="td-sidebar-nav__section pr-md-3">
                
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/extensibility/adapters" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Adapters</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/extensibility/load-generators" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Load Generators</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/extensibility/providers" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Providers</a>
                </li>
                
                <ul>
                  <li class="collapse show" id="">
                    
                  </li>
                </ul>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/extensibility/api" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">REST & GraphQL APIs</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/extensibility/ui" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">UI Plugins</a>
                </li>
                
              
            </ul>
        </ul>  
          
    </ul>
    
    <ul class="td-sidebar-nav__section pr-md-3">
      
      
      <li class="td-sidebar-nav__section-title">
        <a  href="/v0.5/reference" class="align-left pl-0 pr-2 active td-sidebar-link td-sidebar-link__section">📖 Reference</a>
      </li>
      
        <ul>
          <li class="collapse show" id="reference">
              <ul class="td-sidebar-nav__section pr-md-3">
                
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/reference/mesheryctl" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Meshery CLI</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/reference/error-codes" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">Error Codes</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/reference/graphql-apis" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">GraphQL API Reference</a>
                </li>
                
              
                <li class="td-sidebar-nav__section-title">
                  <a href="/v0.5/reference/rest-apis" class="align-left pl-0 pr-2 td-sidebar-link td-sidebar-link__section">REST API Reference</a>
                </li>
                
              
            </ul>
        </ul>  
          
    </ul>
    
    </nav>
  </div>
          </div>
          <div class="d-none d-xl-block col-xl-2 td-toc d-print-none">
              <div class="td-page-meta ml-2 pb-1 pt-2 mb-0">
                  <strong>Tools</strong>
<a href="https://github.com/meshery/meshery/issues/new?assignees=&labels=area%2Fdocs%2C+framework%2Fjekyll&template=documentation.md&title=%5BDocs%5D" rel="noopener" target="_blank"><i class="fab fa-github fa-fw"></i> Create doc issue</a>
<a href="https://github.com/meshery/meshery/blob/master/docs/pages/extensibility/providers.md" rel="noopener" target="_blank"><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<strong>Contents</strong>


<!-- this will parse through the header fields and add a button to open
     an issue / ask a question on Github. The editable field should be in
     the post frontend matter, and refer to the label to open the issue for -->
     

              </div>
              <nav id="TableOfContents"><ul>
              <li><ul id="TOC">
                <!-- Links will be appended here-->
              </ul></li>
              </ul></nav>
          </div>
          <main class="col-12 col-md-9 col-xl-8 pl-md-5" role="main">
            <nav aria-label="breadcrumb" class="d-none d-md-block d-print-none">
	      <ol class="breadcrumb spb-1">
                <li class="breadcrumb-item active" aria-current="page">
      <!-- meshery-custom-begin -->
        <div id="breadcrumbs">

<a href="/v0.5/">home</a>

  
    / <a href="/v0.5/extensibility/">extensibility</a> 
  

  
    / extensibility: providers
  

</div>

<!-- <a href="http://idratherbewriting.com" class="noCrossRef productSubtitle"> Home </a> > <a class="noCrossRef productSubtitle" href="http://localhost:4000">Learn API Doc</a> > providers -->

	      <!-- <a href="/v0.5/extensibility/providers">Extensibility: Providers</a> -->
		  <!-- meshery-custom-end -->
                </li>
	      </ol>
           </nav>
           <div class="td-content">
            
            <h1>Extensibility: Providers</h1>
            
	           <p>Meshery offers Providers as a point of extensibility. With a built-in Local Provider (named “None”), Meshery Remote Providers are designed to be pluggable. Remote Providers offer points of extension to users / integrators to deliver enhanced functionality, using Meshery as a platform. A specific type of provider can be enforced in a Meshery instance by passing it with the env variable ENFORCED_PROVIDER.</p>

<ol>
  <li><strong>Extensibility points offer clean separation of Meshery’s core functionality versus plugin functionality.</strong>
    <ul>
      <li>Meshmap is an example of a feature to be delivered via Remote Provider.</li>
    </ul>
  </li>
  <li><strong>Remote Providers should be able to offer custom RBAC, custom UI components, and custom backend components</strong>
    <ul>
      <li>Dynamically loadable frameworks need to be identified or created to serve each of these purposes.</li>
    </ul>
  </li>
</ol>

<h3 id="design-principles-meshery-remote-provider-framework">Design Principles: Meshery Remote Provider Framework</h3>

<p>Meshery’s Remote Provider extensbility framework is designed to enable:</p>

<ol>
  <li>
    <p><strong>Pluggable UI Functionality:</strong></p>

    <ul>
      <li>Out-of-tree custom UI components with seamless user experience.</li>
      <li>A system of remote retrieval of extension packages (ReactJS components and Golang binaries).</li>
    </ul>
  </li>
  <li>
    <p><strong>Pluggable Backend Functionality:</strong></p>

    <ul>
      <li>Remote Providers have any number of capabilities unbeknownst to Meshery.</li>
    </ul>
  </li>
  <li>
    <p><strong>Pluggable AuthZ</strong></p>
    <ul>
      <li>Design an extensible role based access control system such that Remote Providers can determine their own set of controls. Remote Providers to return JWTs with custom roles, permission keys and permission keychains.</li>
    </ul>
  </li>
</ol>

<p><img src="/v0.5/assets/img/providers/provider_screenshot.png" alt="Providers" /></p>

<h3 id="what-functionality-do-providers-perform">What functionality do Providers perform?</h3>

<p>What a given Remote Provider offers might vary broadly between providers. Meshery offers extension points that Remote Providers are able to use to inject different functionality - functionality specific to that provider.</p>

<ul>
  <li><strong>Authentication and Authorization</strong>
    <ul>
      <li>Examples: session management, two factor authentication, LDAP integration.</li>
    </ul>
  </li>
  <li><strong>Long-Term Persistence</strong>
    <ul>
      <li>Examples: Storage and retrieval of performance test results.</li>
      <li>Examples: Storage and retrieval of user preferences.</li>
    </ul>
  </li>
  <li><strong>Enhanced Visualization</strong>
    <ul>
      <li>Examples: Creation of a visual service mesh topology.</li>
      <li>Examples: Different charts (metrics), debug (log viewer), distributed trace explorers.</li>
    </ul>
  </li>
  <li><strong>Reporting</strong>
    <ul>
      <li>Examples: Using Meshery’s GraphQL server to compose new dashboards.</li>
    </ul>
  </li>
</ul>

<h2 id="types-of-providers">Types of providers</h2>

<p>Two types of providers are defined in Meshery: <code class="language-plaintext highlighter-rouge">local</code> and <code class="language-plaintext highlighter-rouge">remote</code>. The Local provider is built-into Meshery. Remote providers are may be implemented by anyone or organization that wishes to integrate with Meshery. Any number of Remote providers may be available in your Meshery deployment.</p>

<h3 id="remote-providers">Remote Providers</h3>

<p>Use of a Remote Provider, puts Meshery into multi-user mode and requires user authentication. Use a Remote provider when your use of Meshery is ongoing or used in a team environment (used by multiple people).</p>

<p>Name: <strong>“Meshery”</strong> (default)</p>

<ul>
  <li>Enforces user authentication.</li>
  <li>Long-term term persistence of test results.</li>
  <li>Save environment setup.</li>
  <li>Retrieve performance test results.</li>
  <li>Retrieve conformance test results.</li>
  <li>Free to use.</li>
</ul>

<h3 id="local-provider">Local Provider</h3>

<p>Use of the Local Provider, “None”, puts Meshery into single-user mode and does not require authentication. Use the Local provider when your use of Meshery is intended to be shortlived.</p>

<p>Name: <strong>“None”</strong></p>

<ul>
  <li>No user authentication.</li>
  <li>Container-local storage of test results. Ephemeral.</li>
  <li>Environment setup not saved.</li>
  <li>No performance test result history.</li>
  <li>No conformance test result history.</li>
  <li>Free to use.</li>
</ul>

<h2 id="building-a-provider">Building a Provider</h2>

<p>Meshery interfaces with Providers through a Go interface. The Provider implementations have to be placed in the code and compiled together today. A Provider instance will have to be injected into Meshery when the program starts.</p>

<p>Meshery keeps the implementation of Remote Providers separate so that they are brought in through a separate process and injected into Meshery at runtime (OR) change the way the code works to make the Providers invoke Meshery.</p>

<h3 id="remote-provider-extension-points">Remote Provider Extension Points</h3>

<p>Interwoven into Meshery’s web-based, user interface are a variety of extension points. Each extension point is carefully carved out to afford a seamless user experience. Each extension point is identified by a name and type. The following Meshery UI extension points are available:</p>

<ul>
  <li>
    <p><strong>Name:</strong> “navigator”
<strong>Type:</strong> Menu Items<br />
<strong>Description:</strong> This is supposed to be a full page extension which will get a dedicated endpoint in the meshery UI. And will be listed in the meshery UI’s navigator/sidebar. Menu items may refer to full page extensions.</p>
  </li>
  <li>
    <p><strong>Name:</strong> “user_prefs”
<strong>Type:</strong> Single Component<br />
<strong>Description:</strong> This is supposed to be remote react components which will get placed in a pre-existing page and will not have a dedicated endpoint. As of now, the only place where this extension can be loaded is the “User Preference” section under meshery settings.</p>
  </li>
  <li>
    <p><strong>Name:</strong> “Account”
<strong>Type:</strong> Full Page
<strong>Description:</strong> Remote Reactjs components (or other) are placed in a pre-existing page and will have dedicated endpoint: <code class="language-plaintext highlighter-rouge">/extension/account</code>.</p>
  </li>
  <li>
    <p><strong>Name:</strong> /extension/&lt;your name here&gt;<br />
<strong>Type:</strong> Full Page<br />
<strong>Description:</strong> The Provider package is unzipped into Meshery server filesystem under <code class="language-plaintext highlighter-rouge">/app/provider-pkg/&lt;package-name&gt;</code>.</p>
  </li>
</ul>

<p>Remote Providers must fulfill the following endpoints:</p>

<ol>
  <li><code class="language-plaintext highlighter-rouge">/login</code> - return valid token</li>
  <li><code class="language-plaintext highlighter-rouge">/logout</code> - invalidating token</li>
  <li><code class="language-plaintext highlighter-rouge">/capabilities</code> - return capabilities.json</li>
</ol>

<h2 id="ui-extension-points">UI Extension Points</h2>

<p>All UI extensions will be hosted under the endpoint &lt;mesheryserver:port/provider&gt;</p>

<h3 id="userprefs">UserPrefs</h3>

<p>The UserPrefs extension point expects and loads a component to be displayed into /userpreferences page.</p>

<h3 id="navigator">Navigator</h3>

<p>The Navigator extension point loads a set of menu items to be displayed in the menu bar on the left hand side of the Meshery UI.</p>

<h2 id="capabilities-endpoint-example">Capabilities Endpoint Example</h2>

<p>Meshery Server will proxy all requests to remote provider endpoints. Endpoints are dynamically determined and identified in the “capabilities” section of the <code class="language-plaintext highlighter-rouge">/capabilities</code> endpoint. Providers as an object have the following attributes (this must be returned as a response to <code class="language-plaintext highlighter-rouge">/capabilities</code> endpoint):</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"provider_type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"remote"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"package_version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"v0.1.0"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"package_url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"https://layer5labs.github.io/meshery-extensions-packages/provider.tar.gz"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"provider_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Meshery"</span><span class="p">,</span><span class="w">
  </span><span class="nl">"provider_description"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="s2">"Persistent sessions"</span><span class="p">,</span><span class="w">
    </span><span class="s2">"Save environment setup"</span><span class="p">,</span><span class="w">
    </span><span class="s2">"Retrieve performance test results"</span><span class="p">,</span><span class="w">
    </span><span class="s2">"Free use"</span><span class="w">
  </span><span class="p">],</span><span class="w">
  </span><span class="nl">"extensions"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"navigator"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MeshMap"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"href"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
          </span><span class="nl">"uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/meshmap"</span><span class="p">,</span><span class="w">
          </span><span class="nl">"external"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
        </span><span class="p">},</span><span class="w">
        </span><span class="nl">"component"</span><span class="p">:</span><span class="w"> </span><span class="s2">"provider/navigator/meshmap/index.js"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"icon"</span><span class="p">:</span><span class="w"> </span><span class="s2">"provider/navigator/img/meshmap-icon.svg"</span><span class="p">,</span><span class="w">
        </span><span class="nl">"link:"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
        </span><span class="nl">"show"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
        </span><span class="nl">"children"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
          </span><span class="p">{</span><span class="w">
            </span><span class="nl">"title"</span><span class="p">:</span><span class="w"> </span><span class="s2">"View: Single Mesh"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"href"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
              </span><span class="nl">"uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/meshmap/mesh/all"</span><span class="p">,</span><span class="w">
              </span><span class="nl">"external"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w">
            </span><span class="p">},</span><span class="w">
            </span><span class="nl">"component"</span><span class="p">:</span><span class="w"> </span><span class="s2">"navigator/meshmap/index.js"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"icon"</span><span class="p">:</span><span class="w"> </span><span class="s2">"navigator/img/singlemesh-icon.svg"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"link"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
            </span><span class="nl">"show"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
          </span><span class="p">}</span><span class="w">
        </span><span class="p">]</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">],</span><span class="w">
    </span><span class="nl">"user_prefs"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"component"</span><span class="p">:</span><span class="w"> </span><span class="s2">"userprefs/meshmap-preferences.js"</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">},</span><span class="w">
  </span><span class="nl">"capabilities"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"feature"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sync-prefs"</span><span class="p">,</span><span class="w"> </span><span class="nl">"endpoint"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/user/preferences"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"feature"</span><span class="p">:</span><span class="w"> </span><span class="s2">"persist-results"</span><span class="p">,</span><span class="w"> </span><span class="nl">"endpoint"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/results"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"feature"</span><span class="p">:</span><span class="w"> </span><span class="s2">"persist-result"</span><span class="p">,</span><span class="w"> </span><span class="nl">"endpoint"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/result"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"feature"</span><span class="p">:</span><span class="w"> </span><span class="s2">"persist-smi-results"</span><span class="p">,</span><span class="w"> </span><span class="nl">"endpoint"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/smi/results"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"feature"</span><span class="p">:</span><span class="w"> </span><span class="s2">"persist-metrics"</span><span class="p">,</span><span class="w"> </span><span class="nl">"endpoint"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/result/metrics"</span><span class="w"> </span><span class="p">},</span><span class="w">
    </span><span class="p">{</span><span class="w"> </span><span class="nl">"feature"</span><span class="p">:</span><span class="w"> </span><span class="s2">"persist-smp-test-profile"</span><span class="p">,</span><span class="w"> </span><span class="nl">"endpoint"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/user/test-config"</span><span class="w"> </span><span class="p">}</span><span class="w">
  </span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>Meshery enables you as a service mesh owner to customize your service mesh deployment.</p>

<h2 id="configurable-oauth-callback-url">Configurable OAuth Callback URL</h2>

<p>As of release v0.5.39, Meshery Server has extended its capability to configure the callback URL for connected Remote Providers. Helpful when you are deploying Meshery behind an ingress gateway or reverse proxy. You can specify a custom, redirect endpoints for the connected Remote Provider.</p>

<h3 id="example-deployment-scenario-meshery-cloud-istio-and-azure-kubernetes-service">Example Deployment Scenario: Meshery Cloud, Istio, and Azure Kubernetes Service</h3>

<p>User has deployed the Meshery behind a Istio Ingress Gateway and the Istio is also behind an Application Gateway (e.g. AKS Application Gateway). Generally, when you use a GitHub Remote Provider for authentication, it redirect the request to the Istio Ingress Gateway FQDN. In this setup, redirection won’t be successful because the Ingress Gateway is behind an additional Application Gateway. In this case, you have to define where the request should be redirected once it is authenticated from GitHub.</p>

<p><strong><em>Solution:</em></strong></p>

<p>You can define your custom callback URL by setting up <code class="language-plaintext highlighter-rouge">MESHERY_SERVER_CALLBACK_URL</code> env variable while installing meshery in your K8s cluster.</p>

<p>Example:</p>

<p>If you are deploying Meshery using Helm, you can configure the MESHERY_SERVER_CALLBACK_URL as shown in the following example.</p>

<ul>
  <li><strong>Custom URL:</strong> <code class="language-plaintext highlighter-rouge">https://k8s-staging.test.io/</code></li>
  <li><strong>Auth Endpoint:</strong> <code class="language-plaintext highlighter-rouge">api/user/token</code> (append at the end of your custom URL)</li>
</ul>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>helm install meshery meshery/meshery --namespace meshery --set env.MESHERY_SERVER_CALLBACK_URL=https://k8s-staging.test.io/api/user/token
</code></pre></div></div>

<h5 id="note">Note</h5>

<p>With a path like, <code class="language-plaintext highlighter-rouge">https://k8s-staging.test.io/meshery</code>, your callback URL will be <code class="language-plaintext highlighter-rouge">https://k8s-staging.test.io/meshery/api/user/token</code>.</p>

<h2 id="managing-your-remote-provider-extension-code">Managing your Remote Provider Extension Code</h2>

<p>Remote Provider extensions are kept out-of-tree from Meshery (server and UI). You might need to build your extensions under the same environment and set of dependencies as Meshery. The Meshery framework of extensibility has been designed such that in-tree extensions can be safely avoided while still providing a robust platform from which to extend Meshery’s functionality. Often, herein lies the delineation of open vs. closed functionality within Meshery. Remote Providers can bring (plugin) what functionality that they want behind this extensible interface (more about Meshery extensibility), at least that is up to the point that Meshery has provided a way to plug that feature in.</p>

<p>Offering out-of-tree support for Meshery extensions means that:</p>

<ol>
  <li>source code to your Meshery extensions are not required to be open source,</li>
  <li>liability to Meshery’s stability is significantly reduced, avoiding potential bugs in extended components.</li>
</ol>

<p>Through clearly defined extension points, Meshery extensions may be offered as closed source capabilities that plug into open source Meshery code. To facilitate integration of your Meshery extensions, you might automate the building and releasing of your separate, but interdependent code repositories. You will be responsible for sustaining both your ReactJS and Golang-based extensions.</p>

	
              
              <br/>


           </div>
          </main>
        </div>
      </div>
      <footer class="footer bg-dark py-3 row d-print-none">
  <div class="container-fluid mx-sm-5">
    <div class="row">
<!-- meshery-custom-begin"
      <div class="col-6 col-sm-4 text-xs-center order-sm-2">

<ul class="list-inline mb-0">
  <li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="" aria-label="Twitter" data-original-title="Twitter">
    <a class="text-white" target="_blank" href="https://twitter.com/layer5">
      <i class="fab fa-twitter"></i>
    </a>
  </li>
</ul>
</div>
<div class="col-6 col-sm-4 text-right text-xs-center order-sm-3">
<ul class="list-inline mb-0">
  <li class="list-inline-item mx-2 h3" data-toggle="tooltip" data-placement="top" title="" aria-label="GitHub" data-original-title="GitHub">
    <a class="text-white" target="_blank" href="https://github.com/meshery/meshery">
      <i class="fab fa-github"></i>
    </a>
  </li>
</ul>
meshery-custom-end -->

<div class="col-12 col-sm-4 text-center py-2 order-sm-2">
  <div class="text-white">&copy; 2022 The Meshery Authors</div>
  

  <!-- meshery-custom-begin -->

  <p class="mt-2">

  <div class="footer-icons-list">
    <div class="footer-icons">
      <a class="social__link social__link--forum" href="https://meshery.io/community/#discussion-forums" target="_blank" rel="noreferrer">
        <img height="30px" src="" alt="forum">
        <span class="footer-icons-text">Meshery discussion forum</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link social__link--mail" href="mailto:community@layer5.io" target="_blank" rel="noreferrer">
        <img height="30px" width="30px" src="" alt="mail">
        <span class="footer-icons-text">Get connected with the Meshery community</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link social__link--slack" href="https://slack.meshery.io/" target="_blank" rel="noreferrer">
        <img class="slack" height="30px" width="30px" src="" alt="slack">
        <span class="footer-icons-text">Join the Meshery Slack</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link--calendar" href="https://bit.ly/2SbrRhe">
        <svg xmlns="http://www.w3.org/2000/svg" width="30px" height="30px" viewBox="0 0 18 18" xmlns:v="https://vecta.io/nano"><path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z"/><g stroke-linecap="undefined" stroke-linejoin="undefined"><path d="M-3.468 8.168h-.033m25.313-4.242l-.063-.254M7.858 4.814v9.387"/><path d="M1.833 9.507h12.051"/></g></svg>
        <span class="footer-icons-text">Subscribe to the community calender</span>
      </a>
  </div>

   <div class="footer-icons">
      <a class="social__link social__link--twitter" href="https://twitter.com/layer5" target="_blank" rel="noreferrer">
        <img class="twitter" height="30px" width="30px" src="" alt="twitter">
        <span class="footer-icons-text">Follow Meshery on Twitter</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link" href="https://github.com/layer5io" target="_blank" rel="noreferrer">
        <img height="30px" width="30px" class="github" src="" alt="github">
        <span class="footer-icons-text">Contribute to Meshery projects</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link social__link--linkedin" href="https://www.linkedin.com/company/layer5" target="_blank" rel="noreferrer">
        <img class="linkedin" height="30px" width="30px" src="" alt="linkedin">
        <span class="footer-icons-text">Connect to Meshery on Linkedin</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link social__link--youtube" href="https://www.youtube.com/mesheryio?sub_confirmation=1" target="_blank" rel="noreferrer">
        <img class="youtube" height="30px" width="30px" src="" alt="youtube">
        <span class="footer-icons-text">Watch community meeting recordings</span>
      </a>
    </div>

    <div class="footer-icons">
      <a class="social__link social__link--docker" href="https://hub.docker.com/u/meshery/" target="_blank" rel="noreferrer">
        <img class="docker" height="30px" width="30px" src="" alt="docker">
        <span class="footer-icons-text">Access Docker images for Meshery projects</span>
      </a>
    </div>
  </div>
    </p>
  <!-- meshery-custom-end -->
      </div>
    </div>
  </div>
</footer>

<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/clipboard@1/dist/clipboard.min.js"></script>

<script type="text/javascript" src="/v0.5/assets/js/lightbox.js"></script>
<link rel="stylesheet" href="/v0.5/assets/css/lightbox.css">

    </div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script src="/v0.5/assets/js/main.js"></script>

    <script async src='https://www.google-analytics.com/analytics.js'></script>
<script type="application/javascript">
var doNotTrack = false;
if (!doNotTrack) {
	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
	ga('create', 'UA-00000000-0', 'auto');
	ga('send', 'pageview');
}
</script>

  </body>
</html>
<script
  src="https://code.jquery.com/jquery-3.3.1.min.js"
  integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
  crossorigin="anonymous"></script>

<script>
$(document).ready(function() {

    var toc = $('#TOC');

    // Select each header
    sections = $('.td-content h1');
        $.each(sections, function(idx, v) {
            section = $(v);
            var div_id = $(section).attr('id');
            if(!section.hasClass('noTOC')){
               var div_text = section.text().split('¶')[0];
              var parent = $("#" + div_id)
              var content = '<li id="link_' + div_id + '" class="md-nav__item"><a class="md-nav__link" href="#' + div_id + '" title="' + div_text +'">' + div_text +'</a></li>';
              $(toc).append(content);
            }

            // Add section code to subnavigation
            var children = $('<nav class="md-nav"><ul class="md-nav__list"></nav></ul>')
            var contenders = $("#" + div_id).nextUntil("h1");
            $.each(contenders, function(idx, contender){
               if( !$(contender).hasClass("noTOC") && ($(contender).is('h2') || $(contender).is('h3')) ) {
                   var contender_id = $(contender).attr('id');
                   var contender_text = $(contender).text().split('¶')[0];
                   var content = '<li class="md-nav__item"><a class="md-nav__link" href="#' + contender_id + '" title="' + contender_text +'">' + contender_text +'</a></li>';
                   children.append(content);
                }
             })
             $("#link_" + div_id).append(children);
        });
        //added 'selected' tag to the first element of toc
        $('.md-nav__link').first().addClass('selected');

        $(window).scroll(function(e){
          // Detect how far are we from the top of the page
          let windowTop = $(this).scrollTop();
          // Loop through every navigation menu item
          $('.md-nav__link').each(function (event) {       
              if (windowTop >= $($(this).attr('href')).offset().top - 100) {
              // Remove 'selected' from previously highlighted menu items
              $('.selected').removeClass('selected');
              // Highlight the current menu item by adding 'selected' class
              $(this).addClass('selected');
          }
          if($(window).scrollTop() + $(window).height() > $(document).height() - 10) {
            $('.selected').removeClass('selected');
              $(this).addClass('selected');
   }
        });
      })
    });
</script>